<?php
/**
 * Created by PhpStorm.
 * User: trisatria
 * Date: 1/6/14
 * Time: 1:17 PM
 */
namespace Admin\Controller;

use Admin\Model\AdminCommend;
use Admin\Model\AdminTag;
use Admin\Model\AdminTopic;
use Admin\Model\AdminTopicTag;
use Application\Controller\GlobalController;
use Velacolib\Utility\Utility;
use Zend\Mvc\Controller\AbstractActionController;
use Zend\View\Model\ViewModel;
use Admin\Form\AdminTopicForm;
use Frontend\Helper\SimpleImage;
use Admin\Model\AdminUser;
use Admin\Model\AdminUserTable;
use Admin\Model\AdminTopicImg;
use Admin\Model\AdminTopicImgTable;


class TopicController extends AbstractActionController
{
    private $topicTable;
    private $commendTable;
    private $TopicImgTable;
    private $auth;
    private $useTable;
    private $tag_table;
    private $topic_tag_table;

    public function onDispatch(\Zend\Mvc\MvcEvent $e)
    {
        date_default_timezone_set('Asia/Ho_Chi_Minh');

        $this->service_locator_str = 'Admin\Model\AdminTopicTable';
        $this->sm = $this->getServiceLocator();
        $this->topicTable = $this->sm->get($this->service_locator_str);

        $this->service_locator_str = 'Admin\Model\AdminCommendTable';
        $this->sm = $this->getServiceLocator();
        $this->commendTable = $this->sm->get($this->service_locator_str);

        $this->service_locator_str = 'Admin\Model\AdminTopicImgTable';
        $this->sm = $this->getServiceLocator();
        $this->TopicImgTable = $this->sm->get($this->service_locator_str);

        $this->service_locator_str = 'Admin\Model\AdminUserTable';
        $this->sm = $this->getServiceLocator();
        $this->useTable = $this->sm->get($this->service_locator_str);

        $this->service_locator_str = 'Admin\Model\AdminTagTable';
        $this->sm = $this->getServiceLocator();
        $this->tag_table = $this->sm->get($this->service_locator_str);

        $this->service_locator_str = 'Admin\Model\AdminTopicTagTable';
        $this->sm = $this->getServiceLocator();
        $this->topic_tag_table = $this->sm->get($this->service_locator_str);

        $this->auth = Utility::CheckLogin($this);
        if ($this->auth!=null && $this->auth->user_type != 3 ) {
            $this->redirect()->toRoute('admin/child',array('controller'=>'login'));
        }
        if ($this->auth==null){
            $this->redirect()->toRoute('admin/child',array('controller'=>'login'));
        }
        return parent::onDispatch($e);
    }

    public function init()
    {
        //$this->Acl->SetModule('Project');
        //if(!$this->Acl->Check())
        //  $this->redirect()->toRoute('home', array ('action' => 'index'));
    }

    public function indexAction()
    {

        if (!$this->topicTable) {
            $sm = $this->getServiceLocator();
            $this->topicTable = $sm->get('Admin\Model\AdminTopicTable');
        }
        $status = $this->params()->fromQuery('status');
        $cat_id = $this->params()->fromQuery('cat_id');

        $paginator = $this->topicTable->fetchAll();
        ($status == 2) ? $where['status'] = 2 : $where['status'] = 1;

        isset($cat_id) ? $where['cat_id'] = $cat_id : '';
        $paginator = $this->topicTable->fetchTopicWhere($where);

        //if have search
        $search_val = $this->params()->fromQuery('search_val');
        $array_return = array('topics' => $paginator);
        if (isset($search_val) && $search_val != '') {

            $paginator = $this->topicTable->searchFullText($search_val);
            $array_return['search_val'] = $search_val;
            $array_return['topics'] = $paginator;
            //die;
        }
        $array_return['status'] = $status;

        $paginator->setCurrentPageNumber((int)$this->params()->fromQuery('page', 1));
        // set the number of items per page to 10
        $paginator->setItemCountPerPage(ITEM_PER_PAGE);
        return new ViewModel($array_return);
    }

    public function addAction()
    {
        $user_static_array = array();
        $form = new AdminTopicForm();
        $form->get('submit')->setValue('Add');
        $request = $this->getRequest();
        if ($request->isPost()) {
            $topic_model = new AdminTopic();
            $topic_model->getInputFilter();
            //$form->setInputFilter($topic_model->getInputFilter());
            $data = array_merge_recursive(
                $request->getPost()->toArray(),
                $request->getFiles()->toArray()
            );
            $form->setData($data);
            //print_r($this->params()->fromPost());
            //print_r($form->getData());
            //die;
            //$data = $form->getData();

            if ($form->isValid()) {

                $data = $form->getData();

                $file_name = $data['images']['tmp_name'];

                $src = str_replace("./public/", "", $file_name);
                /*$name = str_replace("/img/upload/", "", $src);

                $simpleImage = new SimpleImage($src);
                $simpleImage->resize(280, 220);
                $simpleImage->save("/img/upload/thumb/" . $name);
                //echo '<pre>';
                //print_r('<img src="'.$src.'">');die;
                $file_name = str_replace('.\public', '', $file_name);
                $data['images'] = str_replace("/img/upload/", "/img/upload/", $file_name);*/
                $data['thumb'] = str_replace("/img/upload/", "/img/upload/thumb/", $file_name);
                $data['images'] = $file_name;

                $topic_model->exchangeArray($data);
                 $this->topicTable->saveTopic($topic_model);

            }
        }


        return array('form' => $form, 'userID' => $this->auth->userid);
    }

    public function deleteAction()
    {
        $request = $this->getRequest();
        $id = $this->params()->fromRoute('id');

        if (!$id) {
        } else {
            $this->topicTable->deleteTopic($id);
            $url_referer = $_SERVER['HTTP_REFERER'];
            $this->redirect()->toUrl($url_referer);
        }
    }

    public function editAction()
    {

        $request = $this->getRequest();
        $id = $this->params()->fromRoute('id');
        $user_static_array = array();
        $form = new AdminTopicForm();
        $form->get('submit')->setValue('Edit');
        $topic_model = new AdminTopic();
        $topic_model = $this->topicTable->getTopic($id);

        $form->get('id')->setValue($topic_model->id);
        $form->get('user_id')->setValue($topic_model->user_id);
        $form->get('title')->setValue($topic_model->title);
        $form->get('images')->setValue($topic_model->images);
        $form->get('price')->setValue($topic_model->price);
        $form->get('show_price')->setValue($topic_model->show_price);
        $form->get('short_description')->setValue($topic_model->short_description);
        $form->get('full_description')->setValue($topic_model->full_description);
        $form->get('expire_date')->setValue($topic_model->expire_date);
        $form->get('status')->setValue($topic_model->status);
        $form->get('cat_id')->setValue($topic_model->cat_id);

        $form->get('is_brandnew')->setValue($topic_model->is_brandnew);
        $form->get('thumb')->setValue($topic_model->thumb);
        $form->get('up_date')->setValue($topic_model->up_date);
        $form->get('slug')->setValue($topic_model->slug);
        $form->get('viewed')->setValue($topic_model->viewed);
        $form->get('is_public')->setValue($topic_model->is_public);
        $form->get('topic_location')->setValue($topic_model->topic_location);
        $form->get('topic_type')->setValue($topic_model->topic_type);
        if ($request->isPost()) {

            //upload image
            $data = array_merge_recursive(
                $request->getPost()->toArray(),
                $request->getFiles()->toArray()
            );
            $file = $request->getFiles()->toArray();
            if(isset($file['images']['name']) && $file['images']['name'] != ''){
                $newFileName = time().$file['images']['name'];
                $move = './public/img/upload/'.$newFileName;
                move_uploaded_file($file['images']['tmp_name'], $move);
                copy ( $move , './public/img/upload/thumb/'.$newFileName );
                //end upload image
                $newFileName =  '/img/upload/thumb/'.$newFileName;

            } else{
                $newFileName =   $data['thum_old'];
            }

           //  print_r($newFileName);die;
            $topic_model->getInputFilter();
            //$form->setInputFilter($topic_model->getInputFilter());

            $data['create_date'] = date("Y-m-d H:i:s");
            if($data['thumb']==''){
                $data['thumb'] = $data['thum_old'];
            }
            ($data['images']['name'] == '') ? $file_name = $data['thum_old'] : $file_name = $data['images']['name'];
         //   $file_name = $data['images']['name'];

            unset($data['thum_old']);
            unset($data['images']);
            $form->setData($data);

            if ($form->isValid()) {

                $data = $form->getData();


                /*$name = str_replace("/img/upload/", "", $src);

                $simpleImage = new SimpleImage($src);
                $simpleImage->resize(280, 220);
                $simpleImage->save("/img/upload/thumb/" . $name);
                //echo '<pre>';
                //print_r('<img src="'.$src.'">');die;

                $data['images'] = str_replace("/img/upload/", "/img/upload/", $file_name);*/

               if(isset($file_name)){
                   $data['images'] = $newFileName;
                   $data['thumb'] = $newFileName;
               }else{
                   $data['images'] = $topic_model->images;
                   $data['thumb'] = $topic_model->thumb;
               }

                $topic_model->exchangeArray($data);
                $this->topicTable->saveTopic($topic_model);

            }
        }
        $topic_gallery = $this->TopicImgTable->getTopicImgByTopic($id);
        $topic_tag = $this->topic_tag_table->getTagByPostId($id);
        return array('form' => $form, 'thumbnail' => $topic_model->images, 'gallery' => $topic_gallery, 'user_id' => $this->auth->userid, 'tag_array'=>$topic_tag);
    }

    public function detailAction()
    {

        $id = $this->params()->fromPost('id');
        $TopicModel = $this->topicTable->getTopic($id);
        $commend_model = new AdminCommend();
        $commend_list = $this->commendTable->getCommendbyTopic($id);
        $commend_list->setCurrentPageNumber((int)$this->params()->fromQuery('page', 1));
        $commend_list->setItemCountPerPage(ITEM_PER_PAGE);

        $topic_gallery = $this->TopicImgTable->getTopicImgByTopic($id);

        if (count($topic_gallery) > 0) {
            foreach ($topic_gallery as $gal) {
                $img[] = $gal->link;
                $json['topic_img'] = $img;
            }
        } else {
            $json['topic_img'] = '';
        }
        $json['topic'] = $TopicModel;

        echo json_encode($json);
        die;
        //return new ViewModel(array('topic_info' => $TopicModel, 'commend_list' => $commend_list,'gallery'=>$topic_gallery ,'user_id'=>$this->auth->userid));

    }

    public function excutedetailAction()
    {
        $topic_post = $this->params()->fromPost();
        $topic_id = $topic_post['topic-id'];
        $topic = $this->topicTable->getTopic($topic_id);

        $topic->status = 1;
        $topic->short_description = $topic_post['short_description'];
        $topic->full_description = $topic_post['full_description'];
        $this->topicTable->saveTopic($topic);
        $topic_join = $this->topicTable->getTopicJoinBySlug($topic->slug);

        $smtp_option = null;
        $senderInfo = array(
            'email' => 'mrhungmaster1905@gmail.com',
            'name' => 'Minimall'

        );

        $RecipientInfo = array(
            'email' => $topic_join->email,
            'name' => $topic_join->name,
            'title'=>$topic_join->title ,
            'slug'=> $topic_join->slug ,
            'id'=> $topic_join->topicid ,
            'url'=> 'http://social.velaco.net/raovat/chitiet/'
        );

        $template_path = 'admin/email/tpl/postTopic';

        $subject = 'Tin quảng cáo đã được chấp nhận: '.$topic_join->title;

        Utility::SendMail(false, $smtp_option = null, $senderInfo, $RecipientInfo, $template_path, $subject);




        $response['message'] = 'Cập nhật thành công!';


        echo json_encode($response);
        die;
    }

    public function topicExampleAction()
    {

        $user_id = array(
            '0' => 1,
            '1' => 2,
            '2' => 4,
            '3' => 5,
            '4' => 7,
            '5' => 56,
            '6' => 64,
            '7' => 21,
            '8' => 39,

        );
        $title = array(
            'Đất liền tay xây nhà ngay tại đường Quang Trung Q9',
            'Gà Xám 05 tháng 2.4kg ',
            'Máy ảnh NIKON coolpix S2550 ',
            'Tượng Di Lặc Gỗ Thủy Tùng ',
            'Đầm xinh chấm bi ',
            'Main Foxconn G41 ram 3 còn bh lâu ',
            'Citi bs 60F6-6666 chính chủ ',
            'xe BMW 745I nhập khẩu từ Mỹ ',
            'xe BMW 745I nhập khẩu từ Viet nam '
        );
        for ($cat = 1; $cat <= 20; $cat++) {
            for ($i = (($cat * 100) - 99); $i < $cat * 100; $i++) {
                $index = rand(0, 8);
                $data = array(
                    'user_id' => $user_id[$index],
                    'title' => $title[$index],
                    'images' => '/upload/image/' . rand(1, 20) . '.jpg',
                    'price' => rand(4, 50) * 100,
                    'show_price' => rand(0, 1),
                    'short_description' => 'Đội ngũ nhân viên, công nhân kinh nghiệm là nguồn tài nguyên vô giá.
Hệ thống máy móc hoàn thiện từ Thiết kế, chế bản – In - Gia công Thành phẩm là điểm tựa.

',
                    'full_description' => 'Thiết kế & in Phạm Hiếu

Chúng tôi cung cấp chuyên nghiệp về Thiết kế - In ấn các ấn phẩm cao cấp, in vải , ba lô , túi xách , áo thun ...



Đội ngũ nhân viên, công nhân kinh nghiệm là nguồn tài nguyên vô giá.
Hệ thống máy móc hoàn thiện từ Thiết kế, chế bản – In - Gia công Thành phẩm là điểm tựa.

Chúng tôi luôn sẵn sàng đáp ứng các sản phẩm từ đơn giản đến phức tạp, từ số lượng ít đến số lượng nhiều, chúng tôi giải quyết các sản phẩm hàng gấp đến các sản phẩm được báo vào thời gian cố định.


Mọi yêu cầu của Quý Khách hàng, xin vui lòng liên hệ qua email : Phamhieuinco@gmail.com hoặc

Điện thoại : 0909.404.405 - 0963.227.902 (A.Hiếu)

Xưởng In 1 : 5 Nguyễn Súy , Tân Quý , Tân Phú . Tp.HCM
Xưởng In 2 : Ấp mới 2 Đường Gò Hưu, xã Mỹ Hạnh Nam , Long An ( cách tp hcm 10km )

Cảm ơn Quý Khách đã dành thời gian để xem dịch vụ của chúng tôi!

Chúng tôi luôn cố gắng phấn đấu và nỗ lực để phục vụ Quý Khách tốt nhất!

Đối tác lâu dài đáng tin cậy của bạn !

',
                    'expire_date' => "2014-05-29",
                    'status' => 1,
                    'cat_id' => $cat,
                    'create_date' => date("Y-m-d H:i:s"),
                    'topic_type' => rand(0, 1),
                    'topic_location' => rand(0, 13),
                    'is_brandnew' => 1,
                    'up_date' => time(),
                    'slug' => Utility::alphabetconvert($title[$index]) . '-' . time() . $i
                );

                $topic = new AdminTopic();
                $topic->exchangeArray($data);
                $this->topicTable->saveTopic($topic);

            }
        }
        die;

    }

    public function topicexcuteAction()
    {

        $response = array();
        $response['status'] = true;
        $action = $this->params()->fromPost();

        $id = $action['id'];
        if ($action['action'] == 'unblock') {
            $i = 0;
            foreach ($id as $ids) {
                $i++;
                $topic = $this->topicTable->getTopic($ids);
                $topic->status = 1;
                $this->topicTable->saveTopic($topic);
            }
            $response['status'] = true;
            $response['message'] = 'Unblock ' . $i . ' topic';
        } elseif ($action['action'] == 'block') {
            $i = 0;
            foreach ($id as $ids) {
                $i++;
                $topic = $this->topicTable->getTopic($ids);
                $topic->status = 2;
                $this->topicTable->saveTopic($topic);
            }
            $response['status'] = true;
            $response['message'] = 'Block ' . $i . ' topic';
        } elseif ($action['action'] == 'delete') {
            $i = 0;
            foreach ($id as $ids) {
                $i++;
                $this->topicTable->deleteTopic($ids);
            }
            $response['status'] = true;
            $response['message'] = 'Xóa thành công ' . $i . ' bài viết';
        }


        echo json_encode($response);
        die;

    }

    public function addnewAction(){
        $request =  $this->getRequest();
        $response['status'] = '';
        $response['message'] = '';
        if($request->isPost()){

/** -----------------------------------------Insert  user First---------------------------- */

            $user_data['name'] = $this->params()->fromPost('name');
            $user_data['email'] = $this->params()->fromPost('email');
            $user_data['phone'] = $this->params()->fromPost('phone');
            $user_data['address'] = $this->params()->fromPost('address');
            if($user_data['name'] == '' || $user_data['email'] == '' || $user_data['phone'] =='' || $user_data['address']=='')
            {
                $response['status'] = false;
                $response['message'] = "User can't be empty";
                return new ViewModel(array(
                    'response'=>$response
                ));
            }
            $user_model = new AdminUser();
            $user_model->exchangeArray($user_data);
            $user_id =  $this->useTable->saveUser($user_model);




 /** ---------------------------------Insert topic ------------------------------------------------------  */
            if(isset($user_id)){

                $topic_data['title'] = $this->params()->fromPost('title');
                $topic_data['price'] = $this->params()->fromPost('price');
                $topic_data['full_description'] = $this->params()->fromPost('full_description');
                $topic_data['cat_id'] = $this->params()->fromPost('cat_id');
                $topic_data['topic_location'] = $this->params()->fromPost('topic_location');
                $topic_data['topic_type'] = $this->params()->fromPost('topic_type');
                $topic_data['is_brandnew'] = $this->params()->fromPost('is_brandnew');
                $images = $this->params()->fromPost('image');
                $topic_data['user_id'] = $user_id;
                $topic_data['show_price'] = $this->params()->fromPost('show_price');
                $topic_data['images'] = $images[0];

                $topic_data['thumb'] = str_replace("/img/upload/",'/img/upload/thumb/',$topic_data['images']);
                $topic_data['status'] = 1;
                $topic_data['create_date'] = date("Y-m-d H:i:s");
                $topic_data['up_date'] = time();
                $topic_data['expire_date']  = date("Y-m-d",time()+2592000);
                $topic_data['slug'] = Utility::alphabetconvert($topic_data['title']).'-'.time();
                $topic_data['is_public'] = 'yes';

                //var_dump($topic_data);die;
                      // var_dump($topic_data);die;
                $topic_model = new AdminTopic();
                 $topic_model->exchangeArray($topic_data);
                   $topic_id  =  $this->topicTable->saveTopic($topic_model);

                 if(is_array($images)){
                    foreach($images as $g){

                    $data_gallery = array(
                        'topic_id' => $topic_id,
                        'link' =>  str_replace("/img/upload/","/img/upload/",$g),
                        'user_id' => $user_id
                    );
                    $topicImgModel = new AdminTopicImg();
                    $topicImgModel->exchangeArray($data_gallery);
                    $this->TopicImgTable->saveTopicImg($topicImgModel);

                    }
                 }
                $response['status'] = true;
                $response['message'] = "Create Topic Success";

            }else{
                $response['status'] = false;
                $response['message'] = "User can't be not found!";
            }
           return new ViewModel(array(
               'response'=>$response
           ));


        }
        return new ViewModel(array(
            'response'=>$response
        ));

    }

    public function addnewtagAction(){
        $data =$this->params()->fromPost();
        $topic_id = $data['topic_id'];
        unset($data['topic_id']);
        $tag = new AdminTag();
        $tag->exchangeArray($data);
        $tag_id = $this->tag_table->saveTag($tag);

        $topic_tag = new AdminTopicTag();
        $topic_tag->exchangeArray(array('tag_id'=>$tag_id, 'topic_id'=>$topic_id));
        $id_topic_tag =  $this->topic_tag_table->saveTag($topic_tag);
        $data =  array('topic_tag_id' => $id_topic_tag, 'tag_id' => $tag_id);
        echo json_encode($data);
        die;

    }
    public function deltagAction(){
        $data =$this->params()->fromPost();
        $topic_tag_id = $data['topic_tag_id'];
        $this->topic_tag_table->deleteTopicTag($topic_tag_id);
        die;
    }
    public function edittagAction(){
        $data = $this->params()->fromPost();
        $adminTag = new AdminTag();
        $adminTag->exchangeArray($data);

        $this->tag_table->savetag($adminTag);
        echo 1;
        die;
    }
}